Today's storage devices incorporate many technologies. One important one is NAND Flash memory. Using Flash memory in storage devices such as Solid State Drives (SSDs) involves numerous design considerations. Such important considerations involve strategies for using storage capacity efficiently.
When previously stored data values are updated in Flash memory, the existing pages storing the data values are internally flagged as invalid, and the updated data values are stored in new pages. When data is deleted, the pages storing that data are similarly flagged as invalid. Invalid pages are eventually recovered in a process called garbage collection. But garbage collection operates at the block level—a block containing a number of pages. If garbage collection were to wait until a block was completely empty (i.e., all pages in the block were flagged as invalid), the SSD might eventually have no free pages to which data could be written. Therefore, performing garbage collection may require moving valid pages from blocks targeted for erasure to other blocks.
SSDs may write data to pages in the order in which the data arrives. This means that data from completely unrelated files—even data used by completely unrelated clients, if the SSD is used in a multi-client system—may be adjacent on the SSD. Since there is no latency associated with moving a read head around in an SSD (in contrast with traditional hard disk drives), an SSD's read and write access times are not affected by such a data writing strategy.
A need remains for a way to minimize the impact of garbage collection operations on other operations of an SSD.